import axios from 'axios'
import {Toast,Dialog } from 'vant'
import {baseUrl} from '@/config'
import store from '@/store'
import {getToken} from '@/utils/auth'

// 创建axios实例
const service = axios.create({
  baseURL: baseUrl, // 发起请求基础路径
  timeout: 5000 // 超时时间
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    Toast.loading({//全局loading
      message: '加载中请稍等...',
      forbidClick: true,
    });
    if (store.getters.token) {
      //让每次请求都携带token
      config.headers['X-Token'] = getToken()
    }
    return config
  },
  error => {
    // 处理请求错误
    console.log(error) // 用于调试
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(

  response => {
    Toast.clear();//关闭全局loading
    const res = response.data

    // 如果自定义代码不是200，则判断为错误。
    if (res.code !== 200) {
      Toast(res.message||'Error')
      // 50008: 非法令牌；50012:其他客户端已登录；50014:令牌已过期;
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        // 重新登录
        Dialog.alert({
          title: '提示',
          message: '登陆信息已过期，清重新登录',
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        });
      }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  error => {
    console.log('err' + error) // 用于调试
    Toast(error.message||'Error')
    return Promise.reject(error)
  }
)

export default service
